package com.mybank.domain;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;

;

public class CuentaCorriente extends Cuenta {

    private double sobregiro;

    public CuentaCorriente() {
    }

    public CuentaCorriente(double saldoInicial, double sobregiro) {
        super(saldoInicial);
        this.sobregiro = sobregiro;
    }

    public CuentaCorriente(double saldoInicial) {
        super(saldoInicial);
        sobregiro = 0;
    }

    public void cargarCuentaCorriente(String nroCuentaCorriente) {
        String driverDb;
        String urlDb;
        String usuarioDb;
        String passwordDb;
        // leo las propiedades ingresadas en Controller
        Properties p = System.getProperties();

        driverDb = p.getProperty("driverDb");
        urlDb = p.getProperty("urlDb");
        usuarioDb = p.getProperty("usuarioDb");
        passwordDb = p.getProperty("passwordDb");

        try {
            Class.forName(driverDb);
        } catch (ClassNotFoundException e) {
            System.out.println(e.toString());
        }
        String sql = "SELECT * FROM CUENTAS WHERE NUMERO = '" + nroCuentaCorriente
                + "'";

        try {
            Connection con = DriverManager.getConnection(urlDb, usuarioDb, passwordDb);

            Statement s = con.createStatement();
            ResultSet rs = s.executeQuery(sql);

            while (rs.next()) {
                this.setIdCuenta((rs.getString("1")));
                this.setSaldo(Double.parseDouble(rs.getString(4)));
                this.setSobregiro(Double.parseDouble(rs.getString(5)));
            }
            rs.close();
            s.close();
            con.close();
        } catch (SQLException e) {
        } catch (Exception e) {
        }
    }

    public boolean extraccion(double monto) {

        boolean isOk = false;

        String driverDb;
        String urlDb;
        String usuarioDb;
        String passwordDb;
        // leo las propiedades ingresadas en Controller
        Properties p = System.getProperties();

        driverDb = p.getProperty("driverDb");
        urlDb = p.getProperty("urlDb");
        usuarioDb = p.getProperty("usuarioDb");
        passwordDb = p.getProperty("passwordDb");

        if (getSaldo() + getSobregiro() >= monto) {
            isOk = true;
            saldo = saldo - monto;
            try {
                Class.forName(driverDb);
            } catch (ClassNotFoundException e) {
                System.out.println(e.toString());
            }

            String sql = "UPDATE CUENTAS " + " SET SALDO = " + saldo
                    + " WHERE NUMERO = '" + this.idCuenta + "'";

            try {
                Connection con = DriverManager.getConnection(urlDb, usuarioDb, passwordDb);

                Statement s = con.createStatement();
                s.executeUpdate(sql);
                s.close();
                con.close();

            } catch (SQLException e) {
            } catch (Exception e) {
            }
        } else {
            // mostrar mensaje saldo insuficiente.
        }
        return isOk;
    }

    public double getSobregiro() {
        return sobregiro;
    }

    public void setSobregiro(double sobregiro) {
        this.sobregiro = sobregiro;
    }

    public String toString() {
        String datosCuentaCorriente = "";
        datosCuentaCorriente = this.idCuenta + " " + this.saldo + " " + this.sobregiro;
        return datosCuentaCorriente;
    }
}
